package com.example.auth.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.auth.domain.DataNode;
import com.example.auth.domain.User;
import com.example.config.exception.GlobalExcetion;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
* @author CETC
* @description 针对表【user】的数据库操作Service
* @createDate 2025-09-21 15:13:06
*/
public interface UserService extends IService<User> {

    public User findByUsername(String username);

    public User registerUser(User user) throws com.example.config.exception.GlobalExcetion;

    public Integer findUserTotalNum() throws ExecutionException, InterruptedException;

    public Integer findUserTotalByTable(String tableName);

    public Integer findUserHashTotalNum() throws ExecutionException, InterruptedException;

    public User updateUserById(User user) throws com.example.config.exception.GlobalExcetion;

    public void updatePwd(String username,String password);

    /**
     * 获取用户的主节点
     * @param userName 用户名
     * @return
     */
    public DataNode findDataNodeByUserName(String userName);

    /**
     * 获取用户的主节点
     * @param userId 用户id
     * @return
     */
    public DataNode findDataNodeByUserId(String userId);


    /**
     * 获取用户节点
     * @param user
     * @return
     */
    public DataNode findDataNodeByUser(User user);

    /**
     * 获取用户节点
     * @param user 用户
     * @param nodeNo 节点编号
     * @return
     */
    public DataNode findDataNodeByUser(User user,String nodeNo) throws GlobalExcetion;

    /**
     * 寻找用户通过userId
     * @param userId
     * @return
     */
    public User getUserByHashUserId(String userId);
    /**
     * 寻找用户通过通过用户名
     * @param userName
     * @return
     */
    public User getUserByHashUserName(String userName);
    /**
     * 注册用户通过hash分片
     * @param user
     * @return
     */
    public User registerUserByHashShard(User user) throws GlobalExcetion;
    /**
     * 通过账号获取用户存储在那张表
     * @param userName 用户账号
     * @return  用户所属的数据表
     */
    public String getUserTableByUserName(String userName);

    /**
     * 通过用户id获取用户存储在那张表
     * @param userId
     * @return
     */
    public String getUserTableByUserId(String userId);


    /**
     * 创建用户id，通过用户表
     * @return
     */
    public String createUserIdByUserTable(String userName);


    /**
     * 通过账号获取用户表的索引
     * @param userName
     * @return
     */
    public String getUserTableIndexByUserName(String userName);

    public IPage<User> pageList(Page<User> page, String userName);

    public Integer deleteUserByUserId(String userId);

    /**
     * 查找用户的其他节点, 没有则会新增
     * @param userName 用户账号
     * @param nodeNo   节点编号
     * @return
     */
    public DataNode findDataNodeByUserName(String userName,String nodeNo) throws GlobalExcetion;

    /**
     * 查找用户的其他节点, 没有则会新增
     * @param userId  用户id
     * @param nodeNo  节点编号
     * @return
     */
    public DataNode findDataNodeByUserId(String userId,String nodeNo) throws GlobalExcetion;


}
